﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Common;
using System.Linq;
using System.Text;

namespace Cocon90.Lib.Dal
{
    /// <summary>
    /// 表示ADO操作接口
    /// </summary>
    public interface IDataHelper
    {
        /// <summary>
        /// 取得web.config中的ConnectionStrings中name为“ConnectionString”对应的连接字符串
        /// </summary>
        string GetConnectionString { get; }
        /// <summary>
        /// 创建一个DbCommand实例，注意DBCommand被创建后，对应的Connection将保持打开，所以请在使用完DBCommand后，及时关闭它的Connection。
        /// </summary>
        DbCommand createCommond(string tsqlParamed, CommandType commandType, params DbParameter[] paramKeyAndValue);
        /// <summary>
        /// 创建一个DbParameter实例
        /// </summary>
        DbParameter createParameter(string key, object value);
        /// <summary>
        /// 创建一个DataAdapter实例
        /// </summary>
        DbDataAdapter createDataAdapter(System.Data.Common.DbCommand selectCmd);


        /// <summary>
        /// 执行tsql(可以是带参的)查询操作 返回第一行第一列
        /// </summary>
        object getScalar(string tsqlParamed, params DbParameter[] paramKeyAndValue);
        /// <summary>
        ///  执行存储过程的查询操作 返回第一行第一列
        /// </summary>
        object getScalarProc(string storedProcedureName, params DbParameter[] parameterValues);


        /// <summary>
        /// 执行tsql(可以是带参的)查询操作 返回String类型的第一行第一列，如果结果为空，则返回""。
        /// </summary>
        string getString(string tsqlParamed, params DbParameter[] paramKeyAndValue);
        /// <summary>
        ///  执行存储过程的查询操作 返回String类型的第一行第一列，如果结果为空，则返回""。
        /// </summary>
        string getStringProc(string storedProcedureName, params DbParameter[] parameterValues);

        /// <summary>
        /// 执行tsql(可以是带参的)查询操作 返回int类型的第一行第一列，如果结果为空，则返回"-1"。
        /// </summary>
        int getNumber(string tsqlParamed, params DbParameter[] paramKeyAndValue);
        /// <summary>
        ///  执行存储过程的查询操作 返回int类型的第一行第一列，如果结果为空，则返回"-1"。
        /// </summary>
        int getNumberProc(string storedProcedureName, params DbParameter[] parameterValues);

        /// <summary>
        /// 执行tsql(可以是带参的)查询操作 返回float类型的第一行第一列，如果结果为空，则返回"-1"。
        /// </summary>
        float getFloat(string tsqlParamed, params DbParameter[] paramKeyAndValue);
        /// <summary>
        ///  执行存储过程的查询操作 返回float类型的第一行第一列，如果结果为空，则返回"-1"。
        /// </summary>
        float getFloatProc(string storedProcedureName, params DbParameter[] parameterValues);

        /// <summary>
        /// 执行tsql(可以是带参的)查询操作 返回DateTime类型的第一行第一列，如果结果为空，则返回"1970-1-1"。
        /// </summary>
        DateTime getDateTime(string tsqlParamed, params DbParameter[] paramKeyAndValue);
        /// <summary>
        /// 执行存储过程的查询操作 返回DateTime类型的第一行第一列，如果结果为空，则返回"1970-1-1"。
        /// </summary>
        DateTime getDateTimeProc(string storedProcedureName, params DbParameter[] parameterValues);

        /// <summary>
        /// 执行tsql(可以是带参的)查询操作 返回bool类型的第一行第一列，如果结果为空，则返回"false"。
        /// </summary>
        bool getBoolean(string tsqlParamed, params DbParameter[] paramKeyAndValue);
        /// <summary>
        ///  执行存储过程的查询操作 返回bool类型的第一行第一列，如果结果为空，则返回"false"。
        /// </summary>
        bool getBooleanProc(string storedProcedureName, params DbParameter[] parameterValues);

        /// <summary>
        /// 执行tsql(可以是带参的)更新操作 返回受影响行数，执行失败返回-1
        /// </summary>
        int execNoQuery(string tsqlParamed, params DbParameter[] paramKeyAndValue);
        /// <summary>
        /// 执行存储过程的更新操作 返回受影响行数，执行失败返回-1
        /// </summary>
        int execNoQueryProc(string storedProcedureName, params DbParameter[] parameterValues);


        /// <summary>
        /// 执行tsql(可以是带参的)查询操作 返回结果DataSet
        /// </summary>
        DataSet getDataSet(string tsqlParamed, params DbParameter[] paramKeyAndValue);
        /// <summary>
        /// 执行存储过程的查询操作 返回结果DataSet
        /// </summary>
        DataSet getDataSetProc(string storedProcedureName, params DbParameter[] parameterValues);

        /// <summary>
        /// 执行tsql(可以是带参的)查询操作 返回结果表，如果结果为空，则返回一个空的表
        /// </summary>
        DataTable getTable(string tsqlParamed, params DbParameter[] paramKeyAndValue);
        /// <summary>
        /// 执行存储过程的查询操作 返回结果表，如果结果为空，则返回一个空的表
        /// </summary>
        DataTable getTableProc(string storedProcedureName, params DbParameter[] parameterValues);


    }
}
